﻿/******************************************************************************************************
 * 作者：Raykid
 *
 * 该脚本的作用是将脚本所在目录及其子目录中所有图片资源和swf文件资源打入到一个swf文件中。
 * 该文件的顶级有一名为dictionary的Dictionary类型对象，使用相对路径作为key即可获取所需图片的Class引用。
 * 如有需要请修改下面5行参数，其他代码请不要动。
 ******************************************************************************************************/
var exportPath = "";					// 导出文件路径名，如果有内容则后面需要一个"/"
var exportName = "Raykid";				// 导出文件名，不用加".swf"
var keyPrefix = ""					// 字典中的key的前缀
var keyPostfix = "";					// 字典中的key的后缀
var photoQuality = 85;					// 图片压缩比率，100是最大


fl.createDocument();
var doc = fl.getDocumentDOM();
var lib = doc.library;
var keys = [];
var names = [];
var arr = fl.scriptURI.split("/");
arr.splice(arr.length - 1, 1);
var path = arr.join("/");

importFiles(path);
createDocumentClass();
exportFiles();


function importFiles(uri) {
	if(!FLfile.exists(uri)) return;
	var files;
	var folders;
	var type = FLfile.getAttributes(uri);
	if(type == "D") {			// 如果路径是个文件夹，则对其内部所有元素进行递归
		arr = uri.split("/");
		if(arr[arr.length - 1] == ".svn") return;
		files = FLfile.listFolder(uri);
		for(var i = 0; i < files.length; i++) {
			importFiles(uri + "/" + files[i]);
		}
	} else if(type == "A") {
		arr = uri.split(".");
		var ext = arr[arr.length - 1].toUpperCase();
		switch(ext) {
			case "BMP":
			case "JPG":
			case "JPEG":
			case "PNG":
			case "SWF":
				doc.importFile(uri, true);
				break;
			default:
				return;
		}
		// 重命名
		arr = uri.split("/");
		var fileName = arr[arr.length - 1];
		lib.selectItem(fileName);
		
		// key的命名，用[前缀 + 路径名 + 后缀]的形式命名
		var keyName = keyPrefix + uri.split(path + "/")[1] + keyPostfix;
		keys.push(keyName);
		
		arr = keyName.split("/");
		fileName = arr.join("_");
		arr = fileName.split(".");
		fileName = "R" + arr.join("_");
		lib.renameItem(fileName);
		names.push(fileName);
		
		// 如果是swf文件则修改其类型为MovieClip
		if(ext == "SWF") {
			lib.setItemProperty('symbolType', 'movie clip');
		}
	}
}
function createDocumentClass() {
	// 生成文档类文件
	var str = "";
	str += "package\n";
	str += "{\n";
	str += "\timport flash.display.MovieClip;\n";
	str += "\timport flash.display.Sprite;\n";
	str += "\timport flash.utils.Dictionary;\n";
	str += "\timport flash.display.BitmapData;\n";
	str += "\timport flash.display.Bitmap;\n\n";
	
	str += "\tpublic class " + exportName + " extends Sprite {\n";
	str += "\t\tpublic var dictionary:Dictionary = new Dictionary();\n\n";
	
	str += "\t\tpublic function " + exportName + "() {\n";
	for(i = 0; i < names.length; i++) {
		str += '\t\t\tdictionary["' + keys[i] + '"] = ' + names[i] + ';\n';
	}
	str += "\t\t}\n";
	str += "\t}\n";
	str += "}";
	
	// 导出文件
	FLfile.write("file:///" + exportPath + exportName + ".as", str);
	// 设置文档类
	doc.docClass = exportName;
}
function exportFiles() {
	// 链接库文件
	for(var i = 0; i < names.length; i++) {
		var name = names[i];
		if(!lib.itemExists(name)) continue;
		var item = lib.items[lib.findItemIndex(name)];
		// 通用处理
		item.linkageImportForRS = false;
		item.linkageExportForAS = true;
		item.linkageExportInFirstFrame = true;
		item.linkageIdentifier = item.name;
		// 特殊处理
		if(item.itemType = "bitmap") {// 如果是位图文件则压缩
			item.compressionType = "photo";
			item.useImportedJPEGQuality = false;
			item.quality = photoQuality;
		}
		fl.trace(item.name);
	}
	// 导出SWF
	fl.saveDocument(doc, "file:///" + exportPath + exportName + ".fla");
	doc.exportSWF("file:///" + exportPath + exportName + ".swf");
	// 关闭fla文件
	fl.closeDocument(doc, false);
	// 删掉fla文件和as文件
	FLfile.remove("file:///" + exportPath + exportName + ".fla");
	FLfile.remove("file:///" + exportPath + exportName + ".as");
	// 如果没有更多的Document则关闭Flash
	if(fl.documents.length <= 0) {
		fl.quit();
	}
}